Contact Picker APIã®è©³çްïŒã»ãã¥ãªãã£ãä¿¡é Œæ§ãæãªãããšãªããWebã¢ããªããŠãŒã¶ãŒã®é£çµ¡å ã«ã¢ã¯ã»ã¹ããããã®ææ°ã®ãã©ã€ãã·ãŒåªå ãœãªã¥ãŒã·ã§ã³ã
Contact Picker APIïŒãã€ãã£ããªé£çµ¡å ã¢ã¯ã»ã¹ãšãŠãŒã¶ãŒãã©ã€ãã·ãŒã®ãã©ã³ã¹
ããžã¿ã«æä»£ã«ãããŠãæ¥ç¶æ§ã¯æãéèŠã§ããèšäºãå ±æããããååãå ±åãããžã§ã¯ãã«æåŸ ããããããžã¿ã«ã®ããã«ãŒããéä¿¡ããããæ°ãããã©ãããã©ãŒã ã§åéãšã€ãªãã£ããããŸãããããã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã®ã»ãŒãã¹ãŠã¯ãåçŽã§åºæ¬çãªã¢ã¯ã·ã§ã³ããå§ãŸããŸãïŒé£çµ¡å ã®éžæãé·å¹Žã«ãããããã®äžèŠäºçްãªã¿ã¹ã¯ã¯ãWebäžã®éå€§ãªæ©æŠç¹ã§ãããäž»èŠãªãã©ã€ãã·ãŒåé¡ã§ãããWebã¢ããªã±ãŒã·ã§ã³ã¯ãæ±ãã«ããæåå ¥åãã£ãŒã«ãã䜿çšãããããŠãŒã¶ãŒã®ã¢ãã¬ã¹åž³å šäœãžã®äŸµç¥çãªãªãŒã«ãªã¢ããã·ã³ã°ã®èš±å¯ãèŠæ±ããå¿ èŠããããŸãããããã¯åœç¶ãå€ãã®ãŠãŒã¶ãŒãäžå®ã«ãããŸããã
å€ãã¯ãŒã¯ãããŒãæ³åããŠã¿ãŠãã ããããŠãŒã¶ãŒãååããããžã§ã¯ã管çããŒã«ã«è¿œå ããããšããŸããWebã¢ããªãé¢ããããã€ã¹ã®é£çµ¡å ãªã¹ããéããååãèŠã€ããã¡ãŒã«ã¢ãã¬ã¹ãã³ããŒããWebã¢ããªã«æ»ãããã©ãŒã ãã£ãŒã«ãã«è²Œãä»ããå¿ èŠããããŸããããã¯é¢åãªããã»ã¹ã§ããããšã©ãŒãçºçããããããŠãŒã¶ãŒã®é¢è±ã«ã€ãªãããŸããä»£æ¿ææ®µã¯ãããã®ãµã€ãããã¹ãŠã®é£çµ¡å ã«ã¢ã¯ã»ã¹ããããšãèš±å¯ããããšãããã¿ã³ã§ããããããã¯ã»ãã¥ãªãã£äžã®æªå€¢ã§ãããWebãµã€ãã«é«åºŠãªå人ããŒã¿ãžã®ç¶ç¶çãªã¢ã¯ã»ã¹ãèš±å¯ããå€ãã®å Žåãã¿ã¹ã¯ã«å¿ èŠãªéãããã¯ããã«å€ããªã£ãŠããŸããã
ãã®é·å¹Žã®ãžã¬ã³ãã¯ããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã®ã·ãŒã ã¬ã¹ãªãšã¯ã¹ããªãšã³ã¹ãšWebã®æ©èœãšã®éã«æºãäœããŸããã幞ããªããšã«ãææ°ã®Webæšæºããã®èª²é¡ã«å¯Ÿå¿ããŸãããContact Picker APIã®ç»å Žã§ããããã¯ããã®ã®ã£ãããåãã匷åã§ãšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ã§ããWebã¢ããªã±ãŒã·ã§ã³ãé£çµ¡å æ å ±ã«ã¢ã¯ã»ã¹ããããã®æšæºåããããã©ã€ãã·ãŒä¿è·ã¡ã«ããºã ãæäŸãããŠãŒã¶ãŒããã£ãããšå¶åŸ¡ããããšã§ãã²ãŒã ãæ ¹æ¬çã«å€ããŸãããã®èšäºã§ã¯ãContact Picker APIããã®ãã©ã€ãã·ãŒåªå ã¢ãŒããã¯ãã£ãå®è·µçãªå®è£ ããããŠã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããã«ãããæèœã§ä¿¡é Œã§ããWebãæ§ç¯ããäžã§ã®åœ¹å²ã«ã€ããŠå æ¬çã«è§£èª¬ããŸãã
Contact Picker APIãšã¯ïŒããŒã¿ã¢ã¯ã»ã¹ã«ããããã©ãã€ã ã·ãã
Contact Picker APIã®äžæ žã¯ããã©ãŠã¶ãæäŸããã€ã³ã¿ãŒãã§ãŒã¹ã§ããããŠãŒã¶ãŒã¯ããã€ã¹ã®ãã€ãã£ãã¢ãã¬ã¹åž³ãã1ã€ãŸãã¯è€æ°ã®é£çµ¡å ãéžæããç¹å®ã®éå®ãããæ å ±ãWebã¢ããªã±ãŒã·ã§ã³ãšå ±æã§ããŸããããã¯ãWebãµã€ãããŠãŒã¶ãŒã®é£çµ¡å ãªã¹ãå šäœãéãã«èªã¿åã£ããåæãããããããã®ããŒã«ã§ã¯ãããŸããã代ããã«ãä¿¡é Œã§ãã仲ä»è ãšããŠæ©èœããé£çµ¡å éžæããã»ã¹å šäœãããã€ã¹ã®ãã€ãã£ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã«å§è²ããŸãã
APIã¯ããŠãŒã¶ãŒã®ãã©ã€ãã·ãŒãšå¶åŸ¡ãåªå ãã3ã€ã®åºæ¬ååã«åºã¥ããŠæ§ç¯ãããŠããŸãã
- ãŠãŒã¶ãŒéå§ïŒAPIã¯ããã¿ã³ã®ã¯ãªãã¯ãã¿ãããªã©ããŠãŒã¶ãŒã®ãžã§ã¹ãã£ãŒã®çŽæ¥çãªçµæãšããŠã®ã¿åŒã³åºãããšãã§ããŸããWebãµã€ãã¯ãããã°ã©ã ã§ããŸãã¯ããŒãžããŒãæã«é£çµ¡å ããã«ãŒãããªã¬ãŒã§ããŸãããããã«ãããäžæ£äœ¿çšã鲿¢ããããŠãŒã¶ãŒãåžžã«é£çµ¡å ã¢ã¯ã»ã¹èŠæ±ãéå§ãã人ã§ããããšãä¿èšŒãããŸãã
- ãŠãŒã¶ãŒå¶åŸ¡ã®éžæïŒããªã¬ãŒããããšãAPIã¯ããŒã¿ãçŽæ¥è¿ããŸããã代ããã«ãããã€ã¹ã®äœ¿ãæ £ãããã€ãã£ãé£çµ¡å éžæUIãéããŸãããŠãŒã¶ãŒã¯ããã®ä¿¡é Œã§ããç°å¢å ã§èªåã®é£çµ¡å ãªã¹ããé²èЧããå ±æãããé£çµ¡å ïŒããå ŽåïŒãæç€ºçã«éžæããŸããWebãµã€ãã¯ããŠãŒã¶ãŒãéžæããªãã£ãé£çµ¡å ãæ±ºããŠç¥ããŸããã
- ã¹ã³ãŒãä»ãã®1åéãã®ã¢ã¯ã»ã¹ïŒWebãµã€ãã¯ãå¿ èŠãªæ å ±ã®ç¹å®ã®éšåïŒäŸïŒ'åå'ãš'ã¡ãŒã«'ã®ã¿ïŒãäºåã«å®£èšããå¿ èŠããããŸããããã«ãŒã¯ããªã¯ãšã¹ãããããããã®ããããã£ã®ã¿ã衚瀺ããŠè¿ããŸããã¢ã¯ã»ã¹ã¯äžæçãªãã®ã§ãããŠãŒã¶ãŒãéžæãè¡ããããŒã¿ãWebãµã€ãã«æž¡ããããšãæ¥ç¶ã¯éããããŸãããµã€ãã¯ãå¥ã®æç€ºçãªãŠãŒã¶ãŒã®ãžã§ã¹ãã£ãŒãªãã«é£çµ¡å ãªã¹ãã«åã¢ã¯ã»ã¹ã§ããŸããã
ãã®ã¢ãã«ã¯ãéå»ã®å±éºãªã¢ã¯ã»ã¹èš±å¯ã¢ãã«ããã®æ ¹æ¬çãªéžè±ã§ããã€ã³ã¿ã©ã¯ã·ã§ã³ããWebãµã€ãããã¢ãã¬ã¹åž³å šäœã®ããŒãæž¡ããŠããããŸããïŒããšå°ããããšããããŠãŒã¶ãŒãWebãµã€ãã«ããã®åäžã®ã¿ã¹ã¯ã®ããã«ãå ±æããããšãéžæããé£çµ¡å ã®ç¹å®ã®æ å ±ãããã«ç€ºããŸãããšäŒããããšã«å€ããŸãã
ãã©ã€ãã·ãŒåªå ã¢ãŒããã¯ãã£ïŒä¿¡é Œãæ§ç¯ããçç±
Contact Picker APIã®çŽ æŽãããã¯ããã®ã¢ãŒããã¯ãã£ã«ããããã©ã€ãã·ãŒãäžå¿ã«æ®ããŠãŒãããèšèšãããŸãããããã¯åãªãæ©èœã§ã¯ãããŸãããããã¯ãææ°ã®WebããŠãŒã¶ãŒããŒã¿ãã©ã®ããã«å°éãã¹ããã«ã€ããŠã®å£°æã§ãããã®ãã©ã€ãã·ãŒäžå¿ã®èšèšã®äž»èŠãªã³ã³ããŒãã³ããåæããŠã¿ãŸãããã
ä¿¡é Œã§ãã仲ä»è ãšããŠã®ãã©ãŠã¶
APIã®æãéèŠãªåŽé¢ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãããŠãŒã¶ãŒã®å®å šãªé£çµ¡å ããŒã¿ããŒã¹ãšçŽæ¥ããåãããªãããšã§ãããã©ãŠã¶ãšåºç€ãšãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãå®å šãªä»²ä»åœ¹ãšããŠæ©èœããŸãã
- ãªã¯ãšã¹ãïŒWebãµã€ãã®JavaScriptã¯`navigator.contacts.select()`ãåŒã³åºããå¿ èŠãªããããã£ïŒäŸïŒ`['name', 'email']`ïŒãæå®ããŸãã
- ãããŒã«ãŒïŒãã©ãŠã¶ã¯ãã®ãªã¯ãšã¹ããåãåããŸãããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«ãã£ãŠããªã¬ãŒãããããšãããã³å®å šãªã³ã³ããã¹ãïŒHTTPSïŒã«ããããšãæ€èšŒããŸããæ¬¡ã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãã€ãã£ãé£çµ¡å ããã«ãŒUIã«å¶åŸ¡ãæž¡ããŸãã
- éžæïŒãŠãŒã¶ãŒã¯ãäœ¿ãæ £ããä¿¡é Œã§ããOSã¬ãã«ã®ã€ã³ã¿ãŒãã§ãŒã¹ïŒäŸïŒAndroidã®Googleã³ã³ã¿ã¯ãããã«ãŒããŸãã¯Windowsã®ã·ã¹ãã ããã«ãŒïŒãæäœããŸããæ€çŽ¢ãã¹ã¯ããŒã«ã1ã€ãŸãã¯è€æ°ã®é£çµ¡å ãéžæã§ããŸããWebãµã€ãã®ã³ãŒãã¯å®å šã«ãµã³ãããã¯ã¹åãããŠããããã®ããã»ã¹ãèªèã§ããŸããã
- ã¬ã¹ãã³ã¹ïŒãŠãŒã¶ãŒãéžæã確èªãããšããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯éžæãããé£çµ¡å ãšãªã¯ãšã¹ããããããããã£ã®ã¿ããã©ãŠã¶ã«è¿ããŸãã
- é ä¿¡ïŒæ¬¡ã«ããã©ãŠã¶ã¯ãã®ãã¥ã¬ãŒã·ã§ã³ãããæå°éã®ããŒã¿ã»ãããã`select()`åŒã³åºãã«ãã£ãŠè¿ããããããã¹ã®çµæãšããŠãWebãµã€ãã®JavaScriptã«é ä¿¡ããŸãã
ãã®å€å±€çãªæœè±¡åã«ãããæªæã®ãããŸãã¯ã³ãŒãã£ã³ã°ãäžååãªWebãµã€ãããŠãŒã¶ãŒã®ã¢ãã¬ã¹åž³å šäœãæµåºãããããšã¯ã§ããŸãããæ»æå¯Ÿè±¡é åã¯ããŠãŒã¶ãŒãæç€ºçãã€æèçã«å ±æããããšãéžæããããŒã¿ã®ã¿ã«å€§å¹ ã«åæžãããŸãã
èšèšã«ããæå°éã®ããŒã¿é²åº
APIã¯ãéçºè ã«ããŒã¿æå°åã®ååãå®è·µããããšã匷å¶ããŸããããã¯ããšãŒãããã®GDPRã®ãããªã°ããŒãã«ãªããŒã¿ä¿è·èŠå¶ã®äžæ žãšãªãæŠå¿µã§ãã`select()`ã¡ãœããã§`properties`é åãå¿ é ã«ããããšã§ãAPIã¯éçºè ã«å¯Ÿããå®éã«å¿ èŠãªæ å ±ã«ã€ããŠæ¹å€çã«èããããšã匷å¶ããŸãã
ããšãã°ãã¡ãŒã«ã§ãµãŒãã¹ã«åéãæåŸ ããæ©èœãæ§ç¯ããŠããå Žåã`['name', 'email']`ã®ã¿ããªã¯ãšã¹ãããå¿ èŠããããŸãã`tel`ãŸãã¯`address`ããªã¯ãšã¹ãããããšã¯äžèŠã§ããããŠãŒã¶ãŒããã®ç念ãåŒãèµ·ããå¯èœæ§ããããŸãããã©ãŠã¶ãŸãã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã UIããªã¯ãšã¹ããããããŒã¿ã«é¢ããèŠåã衚瀺ããããšãéžæããå Žåãç°¡æœã§é¢é£æ§ã®é«ããªã¯ãšã¹ãã®æ¹ãããŠãŒã¶ãŒã«æ¿èªãããå¯èœæ§ãã¯ããã«é«ããªããŸãã
ããã¯ãåäžã®`contacts.read`ã¢ã¯ã»ã¹èš±å¯ã§ãããã€ã¹äžã®ãã¹ãŠã®é£çµ¡å ã®ååãé»è©±çªå·ãã¡ãŒã«ãäœæãèªçæ¥ãåçãèš±å¯ã§ããå€ãAPIãšã¯å¯Ÿç §çã§ãã
ã¯ããã«ïŒå®è·µçãªå®è£ ã¬ã€ã
Contact Picker APIã®çµ±åã¯éåžžã«ç°¡åã§ããæ©èœæ€åºãéåææ§ã®çè§£ãããã³é©åãªãšã©ãŒåŠçãå¿ èŠã§ããå®å šãªäŸãèŠãŠãããŸãããã
ã¹ããã1ïŒæ©èœæ€åº
ãŠãŒã¶ãŒã«ãªãã·ã§ã³ãæç€ºããåã«ããŸããã©ãŠã¶ãAPIããµããŒãããŠãããã©ããã確èªããå¿ èŠããããŸããããã¯ãããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãã®åºæ¬ã§ããããã©ãŠã¶ã®æ©èœã«é¢ä¿ãªããã¢ããªã±ãŒã·ã§ã³ããã¹ãŠã®äººã«æ©èœããããšãä¿èšŒããŸãã
const isSupported = ('contacts' in navigator && 'select' in navigator.contacts);
if (isSupported) {
// Show the 'Select Contacts' button
} else {
// Show a fallback manual input field
console.log("Contact Picker API is not supported on this browser.");
}
ã¹ããã2ïŒããããã£ãšãªãã·ã§ã³ã®å®çŸ©
ãŠãŒã¶ãŒã®é£çµ¡å ããå¿ èŠãªæ å ±ãæ±ºå®ããŸãã䜿çšå¯èœãªããããã£ã¯ã`name`ã`email`ã`tel`ã`address`ãããã³`icon`ã§ãã
ãŸãã`multiple`ãªãã·ã§ã³ã䜿çšããŠããŠãŒã¶ãŒãè€æ°ã®é£çµ¡å ãéžæã§ãããã©ãããæå®ããããšãã§ããŸããããã¯ããã©ã«ãã§`false`ã«ãªããŸãã
const properties = ['name', 'email', 'tel'];
const options = { multiple: true };
ã¹ããã3ïŒãŠãŒã¶ãŒã®ãžã§ã¹ãã£ãŒã§ããã«ãŒãããªã¬ãŒãã
APIåŒã³åºãã¯ããã¿ã³ã¯ãªãã¯ãªã©ã®ãŠãŒã¶ãŒéå§ã€ãã³ãã®ã€ãã³ããã³ãã©ãŒå ã«é 眮ããå¿ èŠããããŸããHTMLã«ãã¿ã³ãäœæããã¯ãªãã¯ãªã¹ããŒãã¢ã¿ããããŸãã
HTMLïŒ
<button id="contact-picker-btn">Add Collaborators from Contacts</button>
<div id="contacts-list"></div>
JavaScriptïŒ
document.getElementById('contact-picker-btn').addEventListener('click', async () => {
// ... API call will go here
});
ã¹ããã4ïŒAPIãåŒã³åºããŠã¬ã¹ãã³ã¹ãåŠçãã
ã€ãã³ããªã¹ããŒå ã§ãããããã£ãšãªãã·ã§ã³ã䜿çšããŠ`navigator.contacts.select()`ãåŒã³åºããŸããããã¯`async`颿°ã§ããããããŠãŒã¶ãŒãããã«ãŒããã£ã³ã»ã«ãããªã©ãæåãšå€±æã®äž¡æ¹ã®ã±ãŒã¹ãé©åã«åŠçããããã«`try...catch`ãããã¯ã䜿çšããå¿ èŠããããŸãã
å®å šã§ãé©åã«ã³ã¡ã³ããããã³ãŒãäŸã次ã«ç€ºããŸãã
// Find our button and the container for results
const contactButton = document.getElementById('contact-picker-btn');
const contactsContainer = document.getElementById('contacts-list');
// Check for browser support first
if ('contacts' in navigator && 'select' in navigator.contacts) {
contactButton.disabled = false; // Enable the button if supported
} else {
contactsContainer.innerHTML = "Sorry, the Contact Picker API is not available in your browser.
";
contactButton.disabled = true;
}
// Main function to handle the contact picking process
const pickContacts = async () => {
// Define the properties we want to access.
// It's a best practice to only ask for what you need.
const properties = ['name', 'email', 'tel'];
const options = { multiple: true };
try {
// The select() method returns a promise that resolves with an array of contacts.
// This must be called from within a user gesture event handler.
const contacts = await navigator.contacts.select(properties, options);
// If the user selects contacts, the 'contacts' array will be populated.
// If the user cancels, the promise rejects, and the catch block is executed.
if (contacts.length > 0) {
handleContacts(contacts);
} else {
// This case is unlikely if the user confirms an empty selection,
// but good to handle.
contactsContainer.innerHTML = "No contacts were selected.
";
}
} catch (error) {
// The most common error is 'AbortError' when the user closes the picker.
if (error.name === 'AbortError') {
console.log('User canceled the contact picker.');
contactsContainer.innerHTML = "The contact selection was canceled.
";
} else {
console.error('An error occurred with the Contact Picker API:', error);
contactsContainer.innerHTML = `<p>Error: ${error.message}</p>`;
}
}
};
// Function to process and display the selected contacts
const handleContacts = (contacts) => {
contactsContainer.innerHTML = 'Selected Contacts:
';
const ul = document.createElement('ul');
for (const contact of contacts) {
const li = document.createElement('li');
let contactInfo = '';
// A contact might not have all the requested properties populated
if (contact.name && contact.name.length > 0) {
contactInfo += `<strong>${contact.name.join(', ')}</strong><br>`;
}
if (contact.email && contact.email.length > 0) {
contactInfo += `Email: ${contact.email.join(', ')}<br>`;
}
if (contact.tel && contact.tel.length > 0) {
contactInfo += `Phone: ${contact.tel.join(', ')}<br>`;
}
li.innerHTML = contactInfo;
ul.appendChild(li);
}
contactsContainer.appendChild(ul);
};
// Attach the event listener to our button
contactButton.addEventListener('click', pickContacts);
çŸä»£ã®Webã¢ããªã±ãŒã·ã§ã³ã§ã®ãŠãŒã¹ã±ãŒã¹ïŒã°ããŒãã«ãªèŠç¹
Contact Picker APIã®å®çšçãªã¢ããªã±ãŒã·ã§ã³ã¯ãå¹ åºãæ¥çãšãŠãŒã¶ãŒããŒãºã«åã³ãæ©æŠã軜æžããå šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãã
- çç£æ§ãšã³ã©ãã¬ãŒã·ã§ã³ããŒã«ïŒãã€ãã«æ ç¹ã眮ããããžã§ã¯ã管çã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒãé£çµ¡å ããããŒã ã¡ã³ããŒãæ°ãããããžã§ã¯ãããŒãã«å³åº§ã«è¿œå ã§ããŸããç±³åœããã®ãããªäŒè°ãµãŒãã¹ã§ã¯ããã¹ããã¡ãŒã«ã¢ãã¬ã¹ãã³ããŒã¢ã³ãããŒã¹ãããå¿ èŠãªããã¢ãã¬ã¹åž³ããåå è ãéžæããŠãæåŸ ãªã¹ãããã°ããäœæã§ããŸãã
- ãœãŒã·ã£ã«ããã³ã³ãã¥ãã±ãŒã·ã§ã³ãã©ãããã©ãŒã ïŒãã©ãžã«ã®æ°ãããœãŒã·ã£ã«ã¡ãã£ã¢ã¢ããªã§ã¯ããé£çµ¡å ããåéãæ¢ãããã¿ã³ãæäŸããŠããŠãŒã¶ãŒãæ¢åã®ãããã¯ãŒã¯ã«å®å šã«åå ããŠæ¥ç¶ã§ããããã«ããŸããã¡ãã»ãŒãžã³ã°ã¢ããªã§ã¯ããŠãŒã¶ãŒããã£ããå ã§é£çµ¡å ã«ãŒããå¥ã®äººãšç°¡åã«å ±æã§ããããã«ããããã«äœ¿çšã§ããŸãã
- Eã³ããŒã¹ãšãµãŒãã¹ïŒæ¥æ¬ã®ãªã³ã©ã€ã³ãã©ã¯ãŒããªããªãŒãµãŒãã¹ã§ã¯ãAPIã䜿çšããŠã顧客ãé£çµ¡å ããåä¿¡è ã®ååãšäœæãéžæããŠããã§ãã¯ã¢ãŠãããã»ã¹ãç°¡çŽ åã§ããŸããã€ã³ãã®ãŠãŒã¶ãŒãããžã¿ã«ã®ããã«ãŒããè³Œå ¥ããå Žåãããã«ãŒããåéã®ã¡ãŒã«ã¢ãã¬ã¹ãŸãã¯é»è©±çªå·ãéžæããŠãæ£ããå®å ã«éä¿¡ãããããã«ããããšãã§ããŸãã
- ã€ãã³ã管çïŒãã€ãžã§ãªã¢ã§å°å ã®ã³ãã¥ããã£ã€ãã³ããäŒç»ããŠãããŠãŒã¶ãŒã¯ãWebããŒã¹ã®æåŸ ãã©ãããã©ãŒã ã䜿çšããŠé£çµ¡å ããã²ã¹ããéžæããRSVPã®éä¿¡ããã»ã¹ãåçåã§ããŸãã
ãã©ãŠã¶ã®ãµããŒããšããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãïŒéèŠãªæŠç¥
å€ãã®ææ°ã®Web APIãšåæ§ã«ããã©ãŠã¶ã®ãµããŒãã¯éèŠãªèæ ®äºé ã§ããContact Picker APIã¯ãGoogleãMicrosoftãIntelãªã©ãäž»å°ããããã€ãã£ãã®ãããªæ©èœãWebãã©ãããã©ãŒã ã«æäŸããããã®åãçµã¿ã§ããProject FuguãšããŠç¥ãããããåºç¯ãªã€ãã·ã¢ããã®äžéšã§ãããã®èšäºã®å·çæç¹ã§ã¯ããµããŒãã¯äž»ã«ChromiumããŒã¹ã®ãã©ãŠã¶ã§å©çšå¯èœã§ãã
çŸåšã®ãµããŒãç¶æ³ïŒäŸç€ºïŒïŒ
- Google ChromeïŒãã¹ã¯ãããããã³AndroidïŒïŒå®å šã«ãµããŒããããŠããŸãã
- Microsoft EdgeïŒãã¹ã¯ãããããã³AndroidïŒïŒå®å šã«ãµããŒããããŠããŸãã
- SafariïŒmacOSããã³iOSïŒïŒçŸåšãµããŒããããŠããŸããã
- FirefoxïŒçŸåšãµããŒããããŠããŸããã
ãã®ç¶æ³ã«ãããããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãæŠç¥ã¯æšå¥šãããã ãã§ãªããäžå¯æ¬ ã«ãªããŸããã¢ããªã±ãŒã·ã§ã³ã®äžæ žæ©èœã¯ãContact Picker APIãå©çšå¯èœã§ããããšã«äŸåãã¹ãã§ã¯ãããŸããã
æ£ããã¢ãããŒãã¯æ¬¡ã®ãšããã§ãã
- ãã©ãŒã«ããã¯ãžã®ããã©ã«ãïŒããã©ã«ãã§ã¯ãUIã¯æšæºçã§ä¿¡é Œæ§ã®é«ãå ¥åãã£ãŒã«ãã衚瀺ããå¿ èŠããããŸãããŠãŒã¶ãŒã¯ã¡ãŒã«ã¢ãã¬ã¹ãŸãã¯é»è©±çªå·ãæåã§å ¥åãŸãã¯è²Œãä»ããããšãã§ããŸããããã¯ãã©ãã§ãæ©èœããããŒã¹ã©ã€ã³ã§ãã
- æ€åºãšæ¡åŒµïŒJavaScriptã䜿çšããŠãæ©èœæ€åºãã§ãã¯ïŒ`if ('contacts' in navigator)`ïŒãå®è¡ããŸãã
- æ©èœã®å ¬éïŒAPIããµããŒããããŠããå Žåã¯ãæåå ¥åãã£ãŒã«ãã®æšªã«[é£çµ¡å ããéžæ]ãã¿ã³ãåçã«è¡šç€ºããŸããããã«ããããµããŒããããŠãããã©ãŠã¶ã®ãŠãŒã¶ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ãä»ã®ãã©ãŠã¶ã®ãŠãŒã¶ãŒã«å£ãããšãªãããã䟿å©ã§åŒ·åããããšã¯ã¹ããªãšã³ã¹ãåŸãããšãã§ããŸãã
ãã®ã¢ãããŒãã«ãããå¯èœãªéãåªãããšã¯ã¹ããªãšã³ã¹ãæäŸããªãããæ®éçãªã¢ã¯ã»ã¹ãä¿èšŒãããŸããããã¯ãå ç¢ã§æ éã«èšèšãããWebã¢ããªã±ãŒã·ã§ã³ã®ç¹åŸŽã§ãã
ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
APIã¯å®å šã«ãªãããã«èšèšãããŠããŸãããéçºè ã¯å«ççãã€å¹æçã«äœ¿çšãã責任ããããŸãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ããŠãŒã¶ãŒã®ä¿¡é Œãç¶æã§ããŸãã
- å¿ èŠãªãã®ã ãããªã¯ãšã¹ãããïŒããã¯ããã匷調ããŠãããããããšã¯ãããŸãããæ©èœã粟æ»ããå¿ èŠãªããããã£ã®çµ¶å¯Ÿæå°éã®ã»ããããªã¯ãšã¹ãããŸããã¡ãŒã«ã®ã¿ãå¿ èŠãªå Žåã¯ãé»è©±çªå·ãèŠæ±ããªãã§ãã ãããããã¯ãŠãŒã¶ãŒã®ãã©ã€ãã·ãŒãå°éããã¢ã¯ã·ã§ã³ãå®äºããå¯èœæ§ãé«ããŸãã
- æç¢ºãªã³ã³ããã¹ããæäŸããïŒããã«ãŒãããªã¬ãŒãããã¿ã³ã«ã¯ãæç¢ºã§èª¬æçãªã©ãã«ãå¿ èŠã§ããäžè¬çãªãã€ã³ããŒããã®ä»£ããã«ããé£çµ¡å ããåå è ã远å ããŸãã¯ãé£çµ¡å ãšå ±æãã®ãããªç¹å®ã®ããã¹ãã䜿çšããŸãããŠãŒã¶ãŒã¯ããã®æ å ±ãèŠæ±ããçç±ãæ£ç¢ºã«ç¥ã£ãŠããå¿ èŠããããŸãã
- ããŒã¿ãäžæçã«äœ¿çšããïŒAPIã¯ããã®å Žã§ã®ã¢ã¯ã·ã§ã³çšã«èšèšãããŠããŸããã¢ããªã±ãŒã·ã§ã³ã®æ©èœã«çµ¶å¯Ÿã«äžå¯æ¬ ã§ãããé¢é£ãããã¹ãŠã®ããŒã¿ä¿è·æ³ïŒGDPRãCCPAãªã©ïŒã«æºæ ããŠããŠãŒã¶ãŒããæç€ºçãã€æ å ±ã«åºã¥ããåæãåŸãŠããªãéããåä¿¡ããé£çµ¡å ããŒã¿ããµãŒããŒã«ä¿åããããšã¯é¿ããŠãã ãããããšãã°ãæåŸ ãªã¹ãã«ã¡ãŒã«ã远å ããããšã¯ã¹ãã¬ãŒãžã®æå¹ãªãŠãŒã¹ã±ãŒã¹ã§ããå°æ¥ã®ããŒã±ãã£ã³ã°ã®å¯èœæ§ã®ããã«é£çµ¡å ã«ãŒãå šäœãä¿åããããšã¯ã§ããŸããã
- åžžã«HTTPSã䜿çšããïŒã»ãšãã©ã®åŒ·åãªWeb APIãšåæ§ã«ãContact Picker APIã¯å®å šãªã³ã³ããã¹ãã§ã®ã¿å©çšã§ããŸããã€ãŸããWebãµã€ãã䜿çšããã«ã¯ãHTTPSã§é ä¿¡ããå¿ èŠããããŸããããã¯ããŠãŒã¶ãŒãäžéè æ»æããä¿è·ããæšæºçãªã»ãã¥ãªãã£å¯Ÿçã§ãã
çµè«ïŒãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšãã©ã€ãã·ãŒã®äž¡æ¹ã«ãšã£ãŠWin-Win
Contact Picker APIã¯ãéçºè ããŒã«ãããã®åãªãå¥ã®ããŒã«ã§ã¯ãããŸãããWebãã©ãããã©ãŒã ã®æçããææ ®æ·±ãé²åã衚ããŠããŸããããã¯ãé£çµ¡å ãžã®å®¹æãªã¢ã¯ã»ã¹ãšãããçã®ãŠãŒã¶ãŒããŒãºãèªèããéå»ã®å®å šã§ãªããã©ã€ãã·ãŒäŸµå®³ã®æ¹æ³ã«é Œãããšãªããããã«å¯Ÿå¿ããŸãã
ãŠãŒã¶ãŒã«ãšã£ãŠãããã¯å©äŸ¿æ§ãšã»ãã¥ãªãã£ã®äž¡æ¹ã«ãããŠå€§å¹ ãªæ¹åããããããŸããé¢åãªè€æ°ã¹ãããã®ããã»ã¹ããä¿¡é Œã§ãããã€ãã£ãã€ã³ã¿ãŒãã§ãŒã¹å ã®ããã€ãã®ç°¡åãªã¿ããã«çœ®ãæããŸããæãéèŠãªããšã¯ãå人ããŒã¿ã现ããå¶åŸ¡ã§ãããããå ±æããããã®ããå ±æããã人ãšãå ±æããããšãã«æ£ç¢ºã«å ±æã§ããããã«ãªãããšã§ãã
éçºè ã«ãšã£ãŠãããæµåçã§çµ±åããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæããããã®æšæºåãããã¯ãã¹ãã©ãããã©ãŒã ïŒãµããŒããããŠãããã©ãŠã¶äžïŒã®æ¹æ³ãæäŸããŸãããŠãŒã¶ãŒã®ã¢ãã¬ã¹åž³å šäœãèŠæ±ãåŠçãä¿è·ããè² æ ãšè²¬ä»»ãåãé€ããŸãããã®ãã©ã€ãã·ãŒãä¿è·ããAPIãæ¡çšããããšã§ãéçºè ã¯ãŠãŒã¶ãŒãåŒãä»ããããé åçãªæ©èœãæ§ç¯ã§ãããšåæã«ããŠãŒã¶ãŒã®ãã©ã€ãã·ãŒãå°éããããä¿¡é Œã§ããWebã®æ§ç¯ã«åãçµãã§ããããšããŠãŒã¶ãŒã«äŒããããšãã§ããŸãã
ãã€ãã£ãã¢ããªã±ãŒã·ã§ã³ãšWebã¢ããªã±ãŒã·ã§ã³ã®å¢çããããŸãã«ãªãç¶ããã«ã€ããŠãContact Pickerã®ãããªAPIã¯äžå¯æ¬ ãªæ§æèŠçŽ ã«ãªããŸãããããã¯ããŠãŒã¶ãŒã®ãã©ã€ãã·ãŒãšåæã®åºæ¬ååãç ç²ã«ããããšãªãã匷åã§æèœãªWebã¢ããªã±ãŒã·ã§ã³ãæã€ããšãã§ããããšã蚌æããŠããŸããä»åŸã®æ¹åæ§ã¯æããã§ããæ¬æãæã£ãŠæ§ç¯ããæ®µéçã«åŒ·åããåžžã«ãŠãŒã¶ãŒãå¶åŸ¡ããå¿ èŠããããŸãã